﻿#pragma once

#include <QMimeData>
#include <QStringList>
#include "box.h"
#include <QMetaType>

/*	\struct clip_box
	\brief Структура для хранения блока в буфере обмена
*/
struct clip_box
{
	int id;				//!< Идентификатор блока
	QString name;		//!< Название блока
	int number;			//!< Номер блока на диаграмме
	int cost;			//!< Стоимость блока
	QString cost_unit;	//!< Единица измерения стоимости блока
	QPointF pos;		//!< Координаты в сцене
};

/*	\struct clip_buf
	\brief Структура для хранения списка блоков в буфере обмена
*/
struct clip_buf
{
	int n;					//!< Количество блоков в копируемом наборе
	clip_box buffer[100];	//!< Данные о блоках, максимум 100
};

Q_DECLARE_METATYPE(clip_box);
Q_DECLARE_METATYPE(clip_buf);


/*! \class box_clipboard
	\brief Класс инкапсулирующий работу с элементами хранящимися в буфере обмена.
*/
class box_clipboard
{
public:

	/*! Конструктор по умолчанию
	*/
	box_clipboard(void);

	~box_clipboard(void);

	/*! Загрузка блока в буфер
		\param p Блок
	*/
	void BoxToCP(box &p);

	/*! Загрузка блока из буфера
		\return Блок
	*/
	box *CPToBox(void);
		
	/*! Получение количества блоков находящихся в буфере
		\return КОличество блоков
	*/
	int getNumber();
	
	/*! Подготовка перед работой буфера, вызывать перед использованием данных из буфера
	*/
	void prepareBuf();
	
	/*! Упаковка структуры буфера в массив байтов подходящий для передачи через буфер обмена
		\return Массив байтов
	*/
	QByteArray *toByteArray();
	
	/*! Распаковка буфера с блоками принятого из буфера обмена
		\param b Принятый из буфера ообмена массив байтов
	*/
	void fromByteArray(QByteArray &b);

private:
	clip_buf myBuffer;	//!< Структура с буфером под блоки
	int temp_n;			//!< Номер текущего блока в буфере
};
